package br.sddp.modelo;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Classe que implementa a entidade Duvida.
 * 
 * @author v0rtex
 * TODO Fazer validacoes.
 */

@Entity
@NamedQueries({
	@NamedQuery(name="Duvida.FindAll", query="SELECT d FROM Duvida d"),
	@NamedQuery(name="Duvida.Respondidas", query="SELECT d FROM Duvida d WHERE d.status = true"),
	@NamedQuery(name="Duvida.NaoRespondidas", query="SELECT d FROM Duvida d WHERE d.status = false"),
})
public class Duvida implements Serializable{
	
	/**
	 * serialVersionUID = 5794835270898657338L
	 */
	private static final long serialVersionUID = 5794835270898657338L;

	@Id @GeneratedValue
	private Long idDuvida;
	
	private String titulo;
	
	@Lob
	private String descricao;
	
	@OneToOne
	private Usuario Professor;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date data;
	
	@OneToOne
	private Resposta resposta;
	
	/**
	 * True = respondida, false = nao respondida.
	 */
	private Boolean status;

	//Metodos construtores
	public Duvida() {}
	
	public Duvida(String titulo, String descricao, Usuario professor, Boolean status, Usuario usuario) {
		super();
		this.titulo = titulo;
		this.descricao = descricao;
		this.Professor = professor;
		this.data = new Date(Calendar.getInstance().getTimeInMillis()); 
		this.status = status;
	}

	//Metodos modificadores
	public Long getIdDuvida() {
		return idDuvida;
	}

	public void setIdDuvida(Long idDuvida) {
		this.idDuvida = idDuvida;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Usuario getProfessor() {
		return Professor;
	}

	public void setProfessor(Usuario professor) {
		Professor = professor;
	}

	public Boolean getStatus() {
		return status;
	}

	public void setStatus(Boolean status) {
		this.status = status;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public Resposta getResposta() {
		return resposta;
	}

	public void setResposta(Resposta resposta) {
		this.resposta = resposta;
	}
}
